package dcslock

import (
	"gitee.com/wuuder/dcslock/lock"
	"github.com/redis/go-redis/v9"
)

// Lock 创建一个锁
// redisClient redis客户端
// fair 当fair=ture时，使用的是公平锁，想法则是非公平锁。注意：在同一个锁体系下，禁止两种锁一起做，否则会造成抢占锁错乱情况。
// key 设置一个锁的键，相同一个键名相当于是在同一个锁机制内。
func Lock(redisClient *redis.Client, fair bool, key string) lock.SyncInterface {
	if fair {
		return lock.NewFairSync(redisClient, key)
	}
	return lock.NewNonFairSync(redisClient, key)
}

// DcsLock 创建一个锁
// options redis客户端连接参数
// fair 当fair=ture时，使用的是公平锁，想法则是非公平锁。注意：在同一个锁体系下，禁止两种锁一起做，否则会造成抢占锁错乱情况。
// key 设置一个锁的键，相同一个键名相当于是在同一个锁机制内。
func DcsLock(options *redis.Options, fair bool, key string) lock.SyncInterface {
	client := redisClient(options)
	if fair {
		return lock.NewFairSync(client, key)
	}
	return lock.NewNonFairSync(client, key)
}

// 创建一个redis客户端
func redisClient(options *redis.Options) *redis.Client {
	return redis.NewClient(options)
}
